<?php
require_once ('./Model/LoginHandler.php');
require_once ('./View/LoginView.php');
require_once ('./Model/RegModel.php');
require_once ('./View/RegView.php');
require_once ('./Model/ArticleModel.php');
require_once ('./Model/ArticleEditorModel.php');

class TestAll{
	private $test_db;
	
	public function __construct(){
		$this->test_db = new mysqli('localhost', 'root', '', 'loginmvctest');
	}
	//Kontrollerar alla funktioner i LoginHandler, om fel uppstår skrivs ett passande felmeddelande ut samt 
	//returneras false, uppstår inga fel returneras true
	public function TestLogin(){
		$loginHandler = new LoginHandler($this->test_db);
		
		$loginHandler->DoLogout();
		
		if($loginHandler->IsLoggedIn() == true){
			echo 'DoLogout eller IsLoggedIn test misslyckat, användaren är fortfarande inloggad efter utloggning.<br />';
			return false;
		}
		if($loginHandler->DoLogin('dontexist', 'password') == true){
			echo 'DoLogin test misslyckat, inloggning sker trotts felaktiga uppgifter.<br />';
			return false;
		}	
		if($loginHandler->DoLogin('testuser', '159753') == false){
			echo 'DoLogin test misslyckat, inloggning misslyckas trotts korrekta uppgifter.<br />';
			return false;
		}	
		if($loginHandler->IsLoggedIn($loginHandler->GetSessionUsername(), $loginHandler->GetSessionPassword()) == false){
			echo 'IsLoggedIn test misslyckat, användaren är ej inloggad trotts korrekta uppgifter.<br />';
			return false;
		}	
		
		$loginHandler->DoLogout();
		
		return true;
	}
	public function TestRegister(){
		$regModel = new RegModel($this->test_db);
		
		if($regModel->UsernameExist('testuser') == true){
			echo 'UsernameExist test misslyckades, användare i databasen visas inte trotts att den finns.<br />';
			return false;
		}
		if($regModel->DoRegister('newuser', '159753') == false){
			echo 'DoRegister test misslyckades, ny användare kunde inte registreras i databasen.<br />';
			return false;			
		}
		if($regModel->RemoveUser('newuser') == false){
			echo 'RemoveUser test misslyckades, användare kunde inte tas bort.<br />';
			return false;			
		}
		return true;		
	}
	public function TestArticle(){
		$articleModel = new ArticleModel($this->test_db);
		
		if($articleArray = $articleModel->GetArticleArray()){
			if(!is_array($articleArray)){
				echo 'GetArticleArray test misslyckades, det var inte en array som returnerades.<br />';
				return false;
			}
			if(count($articleArray) != 1){
				echo 'GetArticleArray test misslyckades, antalet poster i arrayn stämmer inte överens med databasen.<br />';
				return false;				
			}
		}
		if(($articleArray = $articleModel->GetArticle(1)) == null){
			echo 'GetArticle test misslyckades, artikel kunde inte hämtas.<br />';
			return false;			
		}
		if(($articleArray = $articleModel->GetArticle(27)) != null){
			echo 'GetArticle test misslyckades, artikel som inte finns kunde hämtas.<br />';
			return false;			
		}
		return true;
	}
	public function TestArticleEditor(){
		$articleEditorModel = new ArticleEditorModel($this->test_db);
		
		if($articleArray = $articleEditorModel->GetArticleArray(1)){
			if(!is_array($articleArray)){
				echo 'GetArticleArray test misslyckades, det var inte en array som returnerades.<br />';
				return false;
			}
			if(count($articleArray) != 1){
				echo 'GetArticleArray test misslyckades, antalet poster i arrayn stämmer inte överens med databasen.<br />';
				return false;				
			}
		}
		if(($articleArray = $articleEditorModel->GetArticle(1, 1)) == null){
			echo 'GetArticle test misslyckades, artikel kunde inte hämtas.<br />';
			return false;			
		}
		if(($articleArray = $articleEditorModel->GetArticle(27, 27)) != null){
			echo 'GetArticle test misslyckades, artikel som inte finns kunde hämtas.<br />';
			return false;			
		}
		if(($articleEditorModel->SubmitArticle('Test headline', 'test artikel text här', 1)) == false){
			echo 'SubmitArticle test misslyckades, artikel kunde inte läggas till.<br />';
			return false;				
		}
		if(($articleEditorModel->RemoveArticle($this->test_db->insert_id, 1)) == false){
			echo 'RemoveArticle test misslyckades, artikel kunde inte tas bort.<br />';
			return false;				
		}
				 
		return true;
	}	
}

$testAll = new TestAll();

if ($testAll->TestLogin() == true) {
	echo "<p>Logintest ok</p>";
} else {
	echo "<p>Logintest fungerar ej</p>";
}

if ($testAll->TestRegister() == true) {
	echo "<p>Registreringstest ok</p>";
} else {
	echo "<p>Registreringstest fungerar ej</p>";
}
if ($testAll->TestArticle() == true) {
	echo "<p>Artikeltest ok</p>";
} else {
	echo "<p>Artikeltest fungerar ej</p>";
}
if ($testAll->TestArticleEditor() == true) {
	echo "<p>ArtikelEditTest ok</p>";
} else {
	echo "<p>ArtikelEditTest fungerar ej</p>";
}
?>

